package com.qf.feign;

import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import com.netflix.hystrix.contrib.javanica.annotation.HystrixProperty;
import com.qf.pojo.Customer;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;

/**
 * 远程调用的接口  搜索微服务
 *
 *   String url = "http://localhost:9002/search/result";全路径
 *
 *   localhost:9002：发生变化：
 *   微服务的名称不会变的
 *
 *
 *   path = "/search":类上的公共路径
 *
 *
 *   fallback = SearchFeignImpl.class:降级处理的实现类的class
 *
 *
 *    *
 *  *     SpringIOC容器中了 ApplicationContext ac = n
 *  *       SearchFeign sf  =  new  SearchFeignImpl
 *             SearchFeignImpl sfi  = ac.getBean(SearchFeignImpl.class);//类型方法获取容器的对象
 *
 *
 * Feign:底层 Ribbin
 *    1、网关根据微服务的名称去注册中心地址
 *    2、注册表 一堆地址
 *    3、Ribbin：轮循的方式 从一堆地址  一个地址
 *
 * @author lixu
 */
//第一种降级处理的办法： @FeignClient(value = "QF-SEARCH",path = "/search",fallback = SearchFeignImpl.class)
@FeignClient(value = "QF-SEARCH",path = "/search",fallbackFactory = SearchFallbackFactory.class)
public interface SearchFeign {

    /**
     * 搜索结果
     */
    @GetMapping("/result")
    public String result();
    /**
     * 传递单个简单的参数
     *
     * SearchFeign:接口中要求必须写 @PathVariable(value="")
     */
    @GetMapping("/param1/{name}/{age}")
    public String param1(@PathVariable(value = "name") String name,
                         @PathVariable(value = "age") Integer age

    );
    /**
     * 传递对象 或集合 或是数组
     */
    @PostMapping("/param2")
    public Customer param2(@RequestBody Customer customer);

    /**
     * 根据ID查询客户对象
     * @param id
     * @return
     */
    @GetMapping("/{id}")
    public Customer findById(@PathVariable(value = "id") Integer id);
}
